/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camara.jersey.Dao;

import com.camara.jersey.Model.Acteur;
import com.camara.jersey.Model.Film;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author camara
 */

public class Factory {

    private EntityManager em;
    private EntityManagerFactory emf;
    private static final String UNIT = "jerseyPU";
    
    public Factory () {
       // emf = Persistence.createEntityManagerFactory(UNIT);
        //em = emf.createEntityManager();
        //em.getTransaction().begin();
        
    }

    public void open() {
        
        emf = Persistence.createEntityManagerFactory(UNIT);
        em = emf.createEntityManager();
        
        em.getTransaction().begin();
        if (em.isOpen()) {
            System.out.println ("Connexion reussie avec la base de donnée");
        }
        else  {
             System.out.println ("Echec de la connexion avec la base de donnée");
        }

    }
    
    public List<Acteur> acteurFindAll() {
        List<Acteur> listActeur = new ArrayList <> ();
        Query query = em.createNamedQuery("Acteur.findAll");
        listActeur = (List<Acteur>) query.getResultList();
        return listActeur;

    }
    
    public Acteur acteurfindById(Integer id) {
        Acteur acteur = new Acteur ();
        Query query = em.createNamedQuery("Acteur.findById");
        query.setParameter("id", id);
        acteur = (Acteur) query.getSingleResult();
        return acteur;

    }
    
   public List<Film> filmFindAll() {
        List<Film> listFilm = new ArrayList <> ();
        Query query = em.createNamedQuery("Film.findAll");
        listFilm = (List<Film>) query.getResultList();
        return listFilm;

    } 
   
   public Film filmfindById(Integer id) {
        Film film = new Film ();
        Query query = em.createNamedQuery("Film.findById");
        query.setParameter("id", id);
        film = (Film) query.getSingleResult();
        return film;

    }
   
   public List <Film> getFilmByActeur (Integer id) {
       List<Film> listFilm = new ArrayList <> ();
       
       return listFilm;
       
   }
   
   public Acteur createdActeur (Acteur acteur) {
       em.persist(acteur);
       return acteur;
   }
   
   
   
   public Acteur removeActeur (Acteur acteur) {
       em.remove(acteur);
       return acteur;
   }
   
   
    
    

   

    public void close() {
        em.getTransaction().commit();
        em.close();
        emf.close();

    }

    public EntityManager getEntityManager() {
        return this.em;
    }

    
    
   

}
